﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIIE_ERP.Codigo;

namespace SIIE_ERP.BaseDatos.Bancos.Transacciones
{
    public class dbo_Transferencias_Bancos
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Transferencias_Bancos(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion

        #region SELECT

        public DataTable Get_Transferencias()
        {
            string Query = @"SELECT A1.*,
                                    A2.Nombre as Origen_Nombre,
                                    A3.Nombre as Destino_Nombre,
                                    A4.Clave as Origen_Clave,
                                    A5.Clave as Destino_Clave
                            FROM ((((
                                dbo_Trans_Transferencia_Cuentas as A1 
                                    INNER JOIN dbo_Cat_Cuenta_Bancaria as A2 ON A1.Id_Cuenta_Origen =A2.Id_Cuenta ) 
                                    INNER JOIN dbo_Cat_Cuenta_Bancaria as A3 ON A1.Id_Cuenta_Destino=A3.Id_Cuenta ) 
                                    INNER JOIN dbo_Cat_Moneda as A4 ON A2.Id_Moneda = A4.Id_Moneda)
                                    INNER JOIN dbo_Cat_Moneda as A5 ON A3.Id_Moneda = A5.Id_Moneda)
                            WHERE A1.RFC = '@@RFC' ORDER BY Fecha_Transferencia DESC";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report(int Id_Origen, int Id_Destino, int Tiempo)
        {
            string Query = @"

               SELECT        
	                a.Id_Transferencia, 
	                a.RFC, a.Secuencia, 
	                a.Fecha_Transferencia, 
	                a.Descripcion, 
	                a.Id_Cuenta_Origen, 
	                b.Nombre AS Cuenta_Origen, 
	                a.Importe_Retiro, 
	                d.Clave AS Moneda_Origen, 
	                a.Id_Cuenta_Destino, 
	                c.Nombre AS Cuenta_Destino, 
	                a.Importe_Deposito, 
	                e.Clave AS Moneda_Destino, a.Estatus, 
	                dbo_Cat_Estatus.Nombre AS Estatus_Desc

                FROM 
	
	                (((((dbo_Trans_Transferencia_Cuentas AS a 
	                INNER JOIN	dbo_Cat_Cuenta_Bancaria AS b ON a.Id_Cuenta_Origen = b.Id_Cuenta )
	                INNER JOIN	dbo_Cat_Cuenta_Bancaria AS c ON a.Id_Cuenta_Destino = c.Id_Cuenta ) 
	                INNER JOIN	dbo_Cat_Moneda AS d ON b.Id_Moneda = d.Id_Moneda )
	                INNER JOIN	dbo_Cat_Moneda AS e ON c.Id_Moneda = e.Id_Moneda )
	                INNER JOIN  dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus )
                
                WHERE 

                    a.RFC = '@@RFC'
                AND (@@Id_Origen = -1 OR @@Id_Origen = a.Id_Cuenta_Origen)
                AND (@@Id_Destino = -1 OR @@Id_Destino = a.Id_Cuenta_Destino)

                AND 
                (
				(@@Tiempo = 1 and Year(a.Fecha_Alta) = Year(NOW()) and Month(a.Fecha_Alta) = Month(NOW())) or
				(@@Tiempo = 2 and Year(a.Fecha_Alta) = Year(DateAdd('m',-1,NOW())) and Month(a.Fecha_Alta) = Month(DateAdd('m',-1,NOW()))) or
				(@@Tiempo = 3 and Year(a.Fecha_Alta) = Year(NOW())) or
				(@@Tiempo = 4 and Year(a.Fecha_Alta) = Year(DateAdd('yyyy',-1,NOW()))) or
				(@@Tiempo = 5)
				)   
            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Origen", Id_Origen.ToString());
            Query = Query.Replace("@@Id_Destino", Id_Destino.ToString());
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion

        #region INSERT

        public Respuesta Insert_Transferencias_Bancos(
            DateTime Fecha,
            string IdCuentaOrigen,
            string MontoOrigen,
            string IdCuentaDestino,
            string MontoDestino,
            string MonedaOrigen,
            string MonedaDestino,
            string Descripcion
        )
        {
            try
            {
                string Query1 = @"UPDATE dbo_Cat_Cuenta_Bancaria 
                                 SET Saldo = (Saldo - @@ImporteRetiro)
                                 WHERE Id_Cuenta = @@IdCuentaOrigen
                                ";

                string Query2 = @"UPDATE dbo_Cat_Cuenta_Bancaria 
                                 SET Saldo = (Saldo + @@ImporteDestino)
                                 WHERE Id_Cuenta = @@IdCuentaDestino
                                ";

                string Query3 = @"INSERT INTO dbo_Trans_Transferencia_Cuentas
                                (
                                Id_Transferencia,
                                RFC,
                                Secuencia,
                                Fecha_Transferencia,                                                                    
                                Estatus,                                                                 
                                Id_Cuenta_Origen,
                                Id_Cuenta_Destino,
                                Importe_Retiro,
                                Id_Moneda_Retiro,
                                Importe_Deposito,
                                Id_Moneda_Deposito,
                                Descripcion,
                                Fecha_Alta,
                                Usuario_Alta,
                                Fecha_Mantto,
                                Usuario_Mantto
                                )
                                VALUES
                                (
                                IIF(DCount('*', 'dbo_Trans_Transferencia_Cuentas') = 0, 1, DMax('Id_Transferencia', 'dbo_Trans_Transferencia_Cuentas') + 1),
                                '@@RFC',
                                IIF(DCount('*', 'dbo_Trans_Transferencia_Cuentas', ""RFC = '@@RFC'"") = 0, 1, DMax('Id_Transferencia', 'dbo_Trans_Transferencia_Cuentas', ""RFC = '@@RFC'"") + 1),
                                '@@Fecha',
                                @@Estatus,
                                @@IdCuentaOrigen,
                                @@IdCuentaDestino,                                    
                                @@ImporteRetiro,
                                @@MonedaRetiro,
                                @@ImporteDestino,
                                @@MonedaDestino,
                                '@@Descripcion',
                                NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                                )";

                Query3 = Query3.Replace("@@RFC", this._RFC);
                Query3 = Query3.Replace("@@Usuario_Alta", this._Usuario);
                Query3 = Query3.Replace("@@Usuario_Mantto", this._Usuario);

                Query3 = Query3.Replace("@@Fecha", Fecha.ToString());
                Query3 = Query3.Replace("@@Estatus", SIIE_ERP.BaseDatos.EstatusDocs_Id.Estatus_Doc_Cargado.GetHashCode().ToString());

                Query1 = Query1.Replace("@@IdCuentaOrigen", IdCuentaOrigen);
                Query3 = Query3.Replace("@@IdCuentaOrigen", IdCuentaOrigen);
                Query2 = Query2.Replace("@@IdCuentaDestino", IdCuentaDestino);
                Query3 = Query3.Replace("@@IdCuentaDestino", IdCuentaDestino);

                Query1 = Query1.Replace("@@ImporteRetiro", MontoOrigen);
                Query3 = Query3.Replace("@@ImporteRetiro", MontoOrigen);
                Query2 = Query2.Replace("@@ImporteDestino", MontoDestino);
                Query3 = Query3.Replace("@@ImporteDestino", MontoDestino);

                Query3 = Query3.Replace("@@MonedaRetiro", MonedaOrigen);
                Query3 = Query3.Replace("@@MonedaDestino", MonedaDestino);

                Query3 = Query3.Replace("@@Descripcion", Descripcion.Replace("'", "''"));
                
                var v = SrvDB.ExecuteQuery_Insert(Query3);
                if (v.Id != 1) return v;
                v = SrvDB.ExecuteQuery_Update(Query1);
                if (v.Id != 1) return v;
                return SrvDB.ExecuteQuery_Update(Query2);

            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion


    }
}
